package net.servir.capacidades.web.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.Ambito;
import net.servir.capacidades.model.PreguntaServicio;
import net.servir.capacidades.model.PreguntaTipo;
import net.servir.capacidades.model.PuestoTipo;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.jsp.JspSistemaEdicion;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.MantenimientoService;
import net.servir.capacidades.service.SistemaAdmService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SistemaEdicionController {

	@Autowired 
	private CapacidadesService capacidadesService;
	
	@Autowired 
	private SistemaAdmService sistemaAdmService;
	
	@Autowired 
	private MantenimientoService mantenimientoService;
	
	@RequestMapping("/sistemaEdicion.htm")
	public @ModelAttribute("sistema")
	JspSistemaEdicion editarSistema(HttpServletRequest request,HttpServletResponse response) throws Exception {
		
		JspSistemaEdicion obj = new JspSistemaEdicion();
		
		//************************************************************
		// se obtiene el dni de la session activa
		//************************************************************
		
		HttpSession session = request.getSession();
		String cod_session =session.getId();

		String dniResponsable = null;
		if(session.getAttribute("dni") != null)			
			dniResponsable = session.getAttribute("dni").toString();
		
		//Obtenemos los datos del Usuario
		Usuario usuario = null;
		if(session.getAttribute("usuario") != null)			
			usuario = (Usuario)session.getAttribute("usuario");
		
		
		if (usuario == null)
			throw new Exception("No se ha identificado al usuario");
		
		obj.setUsuario(usuario);				
		//************************************************************

		Sistema sistema = new Sistema();
		
		Number idSistema = null;
		Number idAmbito = null;
		Number idPuestoTipo = null;
		Number idPreguntaTipo = null;
		Number idPreguntaServicio = null;
		String accion = null;
		if (request.getParameter("id_sistema") != null && !request.getParameter("id_sistema").equals(""))
			idSistema = Integer.parseInt(request.getParameter("id_sistema"));
		
		if (idSistema != null)
		{
			sistema = sistemaAdmService.getSistema(idSistema);		
		}
		String descripcion = request.getParameter("descripcion");
		String mensaje_bienvenida = request.getParameter("mensaje_bienvenida");
		String acronimo = request.getParameter("acronimo");
		String fec_fin_habilitacion = request.getParameter("fec_fin_habilitacion");
		String conAmbitos = "0";
		if (request.getParameter("con_ambitos") != null)
			conAmbitos = request.getParameter("con_ambitos");
		String puesto_tipo = "0";
		if (request.getParameter("puesto_tipo") != null)
			puesto_tipo = request.getParameter("puesto_tipo");
		String funciones = "0";
		if (request.getParameter("funciones") != null)
			funciones = request.getParameter("funciones");

		obj.setSistema(sistema);
		

		//String codEstadoParticipante = null;
		// obtener valores del accion de usuario
		accion = request.getParameter("accion");
		String tipoEdicion = request.getParameter("tipo_edicion");
		if (tipoEdicion == null || tipoEdicion.equals(""))
		{
			if (idSistema == null)
				tipoEdicion = "NUEVO";
			else
				tipoEdicion = "MODIFICAR";
		}	
		
		obj.setTipo_edicion(tipoEdicion);
//		System.out.println("aqui");
		String redirect = "";
		String mensajeUsuario = "";
		// set valores de los controles
		if(accion != null && !accion.equals(""))
		{
			if(accion.equals("GRABAR_AMBITO"))
			{
				Ambito ambito = new Ambito();
				if (request.getParameter("id_ambito")!= null && !request.getParameter("id_ambito").equals(""))
					idAmbito = Integer.parseInt(request.getParameter("id_ambito"));
				
				ambito.setId_ambito(idAmbito);
				ambito.setDescripcion(request.getParameter("ambito_descripcion"));
				ambito.setEstado("1");
				ambito.setId_sistema(idSistema);
				
				idAmbito = sistemaAdmService.grabarAmbito(ambito);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}			
			else if(accion.equals("ELIMINAR_AMBITO"))
			{
				if (request.getParameter("id_ambito")!= null && !request.getParameter("id_ambito").equals(""))
				{
					idAmbito = Integer.parseInt(request.getParameter("id_ambito"));
					mensajeUsuario =  sistemaAdmService.validarEliminarAmbito(idAmbito);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarAmbito(idAmbito);
					}
				}
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}
			else if(accion.equals("ELIMINAR_PUESTO_TIPO"))
			{
				if (request.getParameter("id_puesto_tipo")!= null && !request.getParameter("id_puesto_tipo").equals(""))
				{
					idPuestoTipo = Integer.parseInt(request.getParameter("id_puesto_tipo"));
					mensajeUsuario =  sistemaAdmService.validarEliminarPuestoTipo(idPuestoTipo);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarPuestoTipo(idPuestoTipo);
					}
				}
				
			}
			else if(accion.equals("ELIMINAR_PREGUNTA_TIPO"))
			{
				if (request.getParameter("id_pregunta_tipo")!= null && !request.getParameter("id_pregunta_tipo").equals(""))
				{
					idPreguntaTipo = Integer.parseInt(request.getParameter("id_pregunta_tipo"));
					mensajeUsuario =  sistemaAdmService.validarEliminarPreguntaTipo(idPreguntaTipo);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarPreguntaTipo(idPreguntaTipo);
					}
				}
				
			}
			else if(accion.equals("ELIMINAR_PREGUNTA_SERVICIO"))
			{
				if (request.getParameter("id_pregunta_servicio")!= null && !request.getParameter("id_pregunta_servicio").equals(""))
				{
					idPreguntaServicio = Integer.parseInt(request.getParameter("id_pregunta_servicio"));
					mensajeUsuario =  sistemaAdmService.validarEliminarPreguntaServicio(idPreguntaServicio);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarPreguntaServicio(idPreguntaServicio);
					}
				}
				
			}
			else if(accion.equals("GRABAR_PUESTO_TIPO"))
			{
				PuestoTipo puestoTipo = new PuestoTipo();
				if (request.getParameter("id_puesto_tipo")!= null && !request.getParameter("id_puesto_tipo").equals(""))
					idPuestoTipo = Integer.parseInt(request.getParameter("id_puesto_tipo"));
				puestoTipo.setId_puesto_tipo(idPuestoTipo);
				puestoTipo.setCod_grupo(request.getParameter("cod_grupo_puesto_tipo_" + idPuestoTipo.toString()));
				
				puestoTipo.setPuesto_tipo(request.getParameter("puesto_tipo_" + idPuestoTipo.toString()).toUpperCase());
				puestoTipo.setNemotecnico(request.getParameter("nemotecnico_" + idPuestoTipo.toString()).toUpperCase());

				String es_responsable = null; 
				if (request.getParameter("es_responsable_" + idPuestoTipo.toString()) != null && request.getParameter("es_responsable_" + idPuestoTipo.toString()) != "")
					es_responsable = request.getParameter("es_responsable_" + idPuestoTipo.toString());
				puestoTipo.setEs_responsable(es_responsable);
				puestoTipo.setId_sistema(idSistema);
				puestoTipo.setEstado("1");
				idPuestoTipo = sistemaAdmService.grabarPuestoTipo(puestoTipo);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}
			else if(accion.equals("GRABAR_PREGUNTA_TIPO"))
			{
				PreguntaTipo preguntaTipo = new PreguntaTipo();
				if (request.getParameter("id_pregunta_tipo")!= null && !request.getParameter("id_pregunta_tipo").equals(""))
					idPreguntaTipo = Integer.parseInt(request.getParameter("id_pregunta_tipo"));
				preguntaTipo.setId_pregunta_tipo(idPreguntaTipo);
				preguntaTipo.setId_sistema(idSistema);
				preguntaTipo.setPregunta_tipo(request.getParameter("pregunta_tipo_" + idPreguntaTipo.toString()).toUpperCase());
				idPreguntaTipo = sistemaAdmService.grabarPreguntaTipo(preguntaTipo);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}
			else if(accion.equals("GRABAR_PREGUNTA_SERVICIO"))
			{
				PreguntaServicio preguntaServicio = new PreguntaServicio();
				if (request.getParameter("id_pregunta_servicio")!= null && !request.getParameter("id_pregunta_servicio").equals(""))
					idPreguntaServicio = Integer.parseInt(request.getParameter("id_pregunta_servicio"));
				preguntaServicio.setId_pregunta_servicio(idPreguntaServicio);
				preguntaServicio.setPregunta_servicio(request.getParameter("pregunta_servicio_" + idPreguntaServicio.toString()).toUpperCase());
				preguntaServicio.setId_sistema(idSistema);
				String es_responsable = null; 
				idPreguntaServicio = sistemaAdmService.grabarPreguntaServicio(preguntaServicio);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}
			else if(accion.equals("AGREGAR_PUESTO_TIPO"))
			{
				PuestoTipo puestoTipo = new PuestoTipo();
				if (request.getParameter("id_puesto_tipo")!= null && !request.getParameter("id_puesto_tipo").equals(""))
					idPuestoTipo = Integer.parseInt(request.getParameter("id_puesto_tipo"));
				puestoTipo.setId_puesto_tipo(idPuestoTipo);
				puestoTipo.setCod_grupo(request.getParameter("cod_grupo_puesto_tipo_add"));
				puestoTipo.setPuesto_tipo(request.getParameter("puesto_tipo_add").toUpperCase());
				puestoTipo.setNemotecnico(request.getParameter("nemotecnico_add").toUpperCase());
				String es_responsable = null; 
				if (request.getParameter("es_responsable_add") != null && request.getParameter("es_responsable_add") != "")
					es_responsable = request.getParameter("es_responsable_add");
				puestoTipo.setEs_responsable(es_responsable);
				puestoTipo.setId_sistema(idSistema);
				puestoTipo.setEstado("1");
				idPuestoTipo = sistemaAdmService.grabarPuestoTipo(puestoTipo);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}
			else if(accion.equals("AGREGAR_PREGUNTA_TIPO"))
			{
				PreguntaTipo preguntaTipo = new PreguntaTipo();
				if (request.getParameter("id_pregunta_tipo")!= null && !request.getParameter("id_pregunta_tipo").equals(""))
					idPreguntaTipo = Integer.parseInt(request.getParameter("id_pregunta_tipo"));
				preguntaTipo.setId_pregunta_tipo(idPreguntaTipo);
				preguntaTipo.setPregunta_tipo(request.getParameter("pregunta_tipo_add").toUpperCase());
				preguntaTipo.setId_sistema(idSistema);
				idPreguntaTipo = sistemaAdmService.grabarPreguntaTipo(preguntaTipo);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}
			else if(accion.equals("AGREGAR_PREGUNTA_SERVICIO"))
			{
				PreguntaServicio preguntaServicio = new PreguntaServicio();
				if (request.getParameter("id_pregunta_servicio")!= null && !request.getParameter("id_pregunta_servicio").equals(""))
					idPreguntaServicio = Integer.parseInt(request.getParameter("id_pregunta_servicio"));
				preguntaServicio.setId_pregunta_servicio(idPreguntaServicio);
				preguntaServicio.setPregunta_servicio(request.getParameter("pregunta_servicio_add").toUpperCase());
				preguntaServicio.setId_sistema(idSistema);
				String es_responsable = null; 
				idPreguntaServicio = sistemaAdmService.grabarPreguntaServicio(preguntaServicio);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}


			obj.setMensaje_usuario(mensajeUsuario);
			sistema.setDescripcion(descripcion);
			sistema.setAcronimo(acronimo);
			sistema.setCon_ambitos(conAmbitos);
			sistema.setPuesto_tipo(puesto_tipo);
			sistema.setFunciones(funciones);
			sistema.setFec_fin_habilitacion(fec_fin_habilitacion);
			//sistema.setSistema(descripcion);
//			System.out.println("accion = "+accion);
			if(accion.equals("GRABAR"))
			{
				idSistema = sistemaAdmService.grabarSistema(sistema);	
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
				
				redirect = "sistemas.htm";
			}
			
			if(accion.equals("GRABAR_BIENVENIDA"))
			{
				obj.getSistema().setMensaje_bienvenida(mensaje_bienvenida);
				sistemaAdmService.grabarSistemaBienvenida(obj.getSistema());	
			}
			 
			if (!redirect.equals(""))
				response.sendRedirect(redirect);
				
		}
		if (sistema != null)
		{
			request.setAttribute("DATALIST", sistema.getAmbitos());
			//  obtener tablas satelite referidad a Sistemas
			// Puesto tipo
			obj.setGrupoPuestoTipos(sistemaAdmService.getGrupoPuestoTipos());
			obj.setPuestoTipos(mantenimientoService.getPuestoTipos(idSistema));
			obj.setPreguntaTipos(mantenimientoService.getPreguntaTipos(idSistema));
			obj.setPreguntaServicios(mantenimientoService.getPreguntasServicio(idSistema));
			// Pregunta tipo
		}
		return obj;
	}
	
	/*@RequestMapping(value = "/ambitos.htm", method = RequestMethod.GET) 
	public @ResponseBody  List<Ambito>viewAmbitosAsJSON(HttpServletRequest request, HttpServletResponse response, ModelMap model) { 
	    //logger.debug("Retrieving all users as JSON"); 
		Number idSistema = 2;
		String accion = null;
		if (request.getParameter("id_sistema") != null && !request.getParameter("id_sistema").equals(""))
			idSistema = Integer.parseInt(request.getParameter("id_sistema"));
		
		Sistema sistema = sistemaAdmService.getSistema(idSistema);
	 
	    return sistema.getAmbitos(); 
	} */

}
